package com.clever.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clever.bean.model.OnlineUser;

import java.util.List;

import com.clever.bean.shopping.Conversation;
import com.clever.bean.shopping.projo.output.ConversationDetailVO;

/**
 * 会话表服务接口
 *
 * @Author xixi
 * @Date 2024-04-09 09:09:11
 */
public interface ConversationService {
    /**
     * 发起会话
     *
     * @param receiverId 接收者
     * @param productId  商品id
     */
    void launch(String receiverId, String productId, OnlineUser onlineUser);

    /**
     * 我的会话列表
     *
     * @return List<ConversationDetailVO>
     */
    List<ConversationDetailVO> myConversation(String userId);

    /**
     * 分页查询列表
     *
     * @param pageNumber 页码
     * @param pageSize   每页记录数
     * @param senderId   发送者
     * @param receiverId 接收者
     * @param productId  发起会话商品
     * @return Page<Conversation>
     */
    Page<Conversation> selectPage(Integer pageNumber, Integer pageSize, String senderId, String receiverId, String productId);

    /**
     * 根据id获取会话表
     *
     * @param id id
     * @return Conversation id信息
     */
    Conversation selectById(String id);

    /**
     * 根据发送者获取列表
     *
     * @param senderId 发送者
     * @return List<Conversation> 会话表列表
     */
    List<Conversation> selectListBySenderId(String senderId);

    /**
     * 根据接收者获取列表
     *
     * @param receiverId 接收者
     * @return List<Conversation> 会话表列表
     */
    List<Conversation> selectListByReceiverId(String receiverId);

    /**
     * 根据发起会话商品获取列表
     *
     * @param productId 发起会话商品
     * @return List<Conversation> 会话表列表
     */
    List<Conversation> selectListByProductId(String productId);

    /**
     * 新建会话表
     *
     * @param onlineUser 当前登录用户
     * @return Conversation 新建后的会话表信息
     */
    Conversation create(String receiverId, String productId, OnlineUser onlineUser);

    /**
     * 修改会话表
     *
     * @param conversation 会话表实体信息
     * @param onlineUser   当前登录用户
     * @return Conversation 修改后的会话表信息
     */
    Conversation update(Conversation conversation, OnlineUser onlineUser);

    /**
     * 保存会话表
     *
     * @param conversation 会话表实体信息
     * @param onlineUser   当前登录用户
     * @return Conversation 保存后的会话表信息
     */
    Conversation save(Conversation conversation, OnlineUser onlineUser);

    /**
     * 根据id删除信息
     *
     * @param id         id
     * @param onlineUser 当前登录用户
     */
    void delete(String id, OnlineUser onlineUser);

    /**
     * 根据id列表删除信息
     *
     * @param ids        id列表
     * @param onlineUser 当前登录用户
     */
    void deleteBatchIds(List<String> ids, OnlineUser onlineUser);

    /**
     * 根据发送者删除
     *
     * @param senderId   发送者
     * @param onlineUser 当前登录用户
     */
    void deleteBySenderId(String senderId, OnlineUser onlineUser);

    /**
     * 根据接收者删除
     *
     * @param receiverId 接收者
     * @param onlineUser 当前登录用户
     */
    void deleteByReceiverId(String receiverId, OnlineUser onlineUser);

    /**
     * 根据发起会话商品删除
     *
     * @param productId  发起会话商品
     * @param onlineUser 当前登录用户
     */
    void deleteByProductId(String productId, OnlineUser onlineUser);

}
